<?php

    /*pdk@medincom.ru
    snl@medincom.ru*/
    
    $kartoteka = new webdoctor_kartoteka();
    $mikron->OperatingInstructions->AddFunction('WEBDOCTOR_KARTOTEKA', 'processor', $kartoteka);
    $mikron->OperatingInstructions->AddFunction('WEBDOCTOR_GETCARD', 'getCard', $kartoteka);
    $mikron->Schema->Add(dirname(__FILE__).'/schema.xml', 'Схема модуля картотеки');

    class webdoctor_kartoteka
    {

        function __construct()
        {
            global $mikron;
            $mikron->Handlers->AddSaveHandler('PreSavePerson', Array('T_PERSON'), $this);
            $mikron->Applications->Add($this);
        }

        /**
        * Получение карточки картотеки для просто вывода на экран
        * 
        * @param mixed $parameters
        */
        public function getCard($parameters)
        {
            global $mikron;
            try
            {
                if(!isset($parameters['id']))
                {
                    throw new Exception('Карточка не найдена.');
                }
                $cardfileid = $parameters['id'];
                $dataObject = new DataObject('get_card_file');
                $dataObject->SetGuid('logininfoid', $mikron->Users->CurrentUser()->user->logininfoid->value);
                $dataObject->SetGuid('cardfileid', $cardfileid);
                $result = $mikron->Site->Soap->Call(null, $dataObject);
                
                if($result instanceof MikronException)
                {
                    throw new Exception($result->Description, $result->Code);
                }

                $LastName = $result->GetString('lastname');
                $FirstName = $result->GetString('firstname');
                $FatherName = $result->GetString('fathername');
                $sex = $result->GetInt('sex');
                $birthday = $result->GetOADateTimeMSSQL('birthday');
                $oms_series = $result->GetString('omsseries');
                $oms_number = $result->GetString('omsnumber');

                $cardinfo = $cardfileid;
                $cardid = $cardfileid;
                $carddt = MikronDateTime::BeautifulDate(strtotime($birthday));
                $polis = $oms_series.' '.$oms_number;
                $birthday = MikronDateTime::BeautifulDate(($birthday)).' г.';
                /* ?><h2>Карточка №<?php echo $cardid; ?></h2><?php */
                $frm = new html_form('cardinfo', 'get', '/remoterecord/cardinfo.php', null, 1);
                $table = new html_table(2, 'table1', null, 4);
                    $table->newcol("Фамилия:"); $table->newcol(); $frm->addInput(1, 'lastname', null, 40, null, false, $LastName);
                    $table->newcol("Имя:"); $table->newcol(); $frm->addInput(1, 'firstname', null, 40, null, false, $FirstName);
                    $table->newcol("Отчество:"); $table->newcol(); $frm->addInput(1, 'fathername', null, 40, null, false, $FatherName);
                    $table->newcol("Дата рождения:"); $table->newcol(); $frm->addInput(1, 'birthday', null, 20, null, false, $birthday);
                    // $table->newcol("Полис:"); $table->newcol(); $frm->addInput(1, 'polis', null, 20, null, false, $polis);
                    /* $table->newcol("&nbsp;"); $table->newcol(); */
                $table->end();
                $frm->end();
                ?><button id="exclosebutton2" onclick="$('div#cardinfo').fadeOut();">Закрыть</button><?php
            }
            catch(Exception $ex)
            {
                echo $ex->getMessage();
            }
            exit;
        }

        /**
        * Вызывается при отправке заполненной новой формы карточки картотеки
        * 
        * @param mixed $entity
        */
        public function PreSavePerson($entity)
        {            
            global $mikron;
            switch(get_class($entity))
            {
                case 'T_PERSON':
                    if(!is_null($entity->uniqueid->value))
                    {
                        return true;
                    }
                    $with_ajax = isset($_REQUEST['ajax']);
                    if($with_ajax)
                    {
                        $with_ajax = ($_REQUEST['ajax'] == 'addperson');
                    }
                    try
                    {
                        $this->ServerAddCardFile($entity);
                        if($with_ajax)
                        {
                            $mikron->Tools->ThrowPage('Карточка успешно добавлена в картотеку.', 200);
                        }
                        else
                        {
                            echo 'Карточка успешно добавлена в картотеку';
                        }
                        return false;
                    }
                    catch(Exception $ex)
                    {
                        if($with_ajax)
                        {
                            $mikron->Tools->ThrowPage($ex->getMessage(), 500);
                        }
                        else
                        {
                            $mikron->Tools->ThrowPage(null, 500, $mikron->Tools->MakePath('?addpeople&error=notfound', true));
                        }
                    }
                    break;
                default:
                    return true;
                    break;
            }
        }

        /**
        * Добавление карточки в картотеку
        */
        function ServerAddCardFile($person)
        {

            global $mikron;

            $remote_lpu_id = $person->remotelpu->value;
            $remote_lpu = $mikron->Queries->QueryOne('RS_LPU', (int)$person->remotelpu->value);
            $remote_lpu_guid = null;
            if($remote_lpu instanceof RS_LPU)
            {
                $remote_lpu_guid = $remote_lpu->guid->value;
            }

            /**
            * Проверка существования персоны в БД
            */
            $dataObject = new DataObject('check_person');
            $dataObject->SetString('logininfoid', $mikron->Users->CurrentUser()->user->logininfoid->value);
            $dataObject->SetString('oms_number', $person->omsnumber->value);
            $dataObject->SetOADateTimeMSSQL('birthday', strtotime($person->birthday->value));
            $dataObject->SetString('lastname', $person->lastname->value);
            $dataObject->SetString('firstname', $person->firstname->value);
            $dataObject->SetString('fathername', $person->fathername->value);
            $dataObject->SetString('patient_identifier_code', $person->patient_identifier_code->value);
            $result = $mikron->Site->Soap->Call($remote_lpu_guid, $dataObject);
            if($result instanceof MikronException)
            {
                throw new Exception('Нет связи с учреждением. Пожалуйста, повторите попытку через несколько минут.');
            }
            $remote_lpu_ambulance_card_id = $result->GetString('guid');
            if($mikron->Tools->IsNullOrEmpty($remote_lpu_ambulance_card_id))
            {
                throw new Exception('Карточка с такими данными не числится в базе.');
            }

            $dataObject->name = 'card_file_exists';
            $result = $mikron->Site->Soap->Call('card_file_exists', $dataObject);
            if($result instanceof MikronException)
            {
                throw new Exception('Ошибка проверки на стороне сервера. Пожалуйста, повторите попытку.');
            }
            $card_file_guid = $result->GetString('guid');
            if(!$mikron->Tools->IsNullOrEmpty($card_file_guid))
            {
                throw new Exception('Карточка с такими данными уже присутствует в картотеке.');
            }

            $dataObject->name = 'add_card_file';
            $dataObject->SetGuid('remote_lpu_guid', $remote_lpu_guid);
            $dataObject->SetGuid('remote_lpu_ambulance_card_id', $remote_lpu_ambulance_card_id);
            $result = $mikron->Site->Soap->Call(null, $dataObject);

            if($result instanceof MikronException)
            {
                throw new Exception('Ошибка проверки на стороне сервера. Пожалуйста, повторите попытку.');
            }

            return false;
        }

        function processor($parameters)
        {
            global $mikron;
            $mikron->Site->Updater->CheckVersion(null);
            $cabinet = $mikron->Users->CurrentUser()->user;
            if(isset($_REQUEST['addpeople']))
            {
                $this->showaddform(false);
                $t = new html_table();
                $t->newcol();
                if(isset($_GET['error']))
                {
                    switch($_GET['error'])
                    {
                        case 'notfound':
                            echo '{{nicewindow style=error caption="Ошибка"}}Внимание, карточка
                            с такими данными не числится в базе.{{/nicewindow}}';
                    }
                }
                $t->end();
            }
            else
            {
                $tbl2 = new html_table(2, null, null, 0, 0);
                $tbl2->newcol(null, null, null, null);
                $tbl2->newcol(null, null, null, null, 'addpeoplebox');
                    $frm = new html_form('addpeople', 'post', $mikron->Tools->MakePath('?addpeople'),
                        'ShowAddPeopleForm(); return false;');
                    $frm->addSubmit('addpeoplesubmit', 'Добавить карточку');
                    $frm->end();
                $tbl2->newcol(null, null, null, null, null, null, null, null, 2);
                    $this->showlist();
                $tbl2->end();
                $this->showaddform(true);
            }
        }

        /**
        * Удаление карточки из картотеки
        */
        public function deletecardfile($parameters)
        {
            if(!array_key_exists('id', $parameters))
            {
                return;
            }
            global $mikron;
            $id = $parameters['id'];
            $dataObject = new DataObject('delete_card_file');
            $dataObject->SetString('logininfoid', $mikron->Users->CurrentUser()->user->logininfoid->value);
            $dataObject->SetGuid('id', $id);
            $result = $mikron->Site->Soap->Call(null, $dataObject);
            if(array_key_exists('return', $parameters))
            {
                $mikron->Tools->GoToPage($parameters['return']);
            }
        }
        
        public function getCardList()
        {
            global $mikron;
            $dataObject = new DataObject('get_card_files');
            $dataObject->SetString('logininfoid', $mikron->Users->CurrentUser()->user->logininfoid->value);
            try
            {
                return $mikron->Site->Soap->Call(null, $dataObject);
            }
            catch(Exception $ex)
            {
                CriticalError($ex->getMessage(), $ex, true);
            }
        }

        /**
        * Вывод списка картотеки
        */
        function showlist()
        {
            global $mikron;

            $result = $this->getCardList();
            if(!($result instanceof DataObject))
            {
                echo 'Ваша картотека пуста.';
                return;
            }

            ?><div style="padding-top: .5em;"><?php
            $tbl = new html_table(null, 'wintable2', '640px');
            $tbl->addhead('&nbsp;');
            $tbl->addhead('Ф.И.О.');
            $tbl->addhead('Дата рождения');
            //$tbl->addhead('ОМС');
            $tbl->addhead('&nbsp;');
            // $tbl->addhead('&nbsp;');

            $cardfiles = $result->GetList('cardfiles');

            foreach($cardfiles as $cardfile)
            {
                $card_id = $cardfile->GetString('id');
                $birthday = date($mikron->Constants->DateFormatToString, $cardfile->GetOADateTimeMSSQL('birthday'));
                $oms = $cardfile->GetString('omsseries')." ".$cardfile->GetString('omsnumber');
                $tbl->newrow();
                    $fio = $cardfile->GetString('lastname').' '.$cardfile->GetString('firstname').' '.$cardfile->GetString('fathername');
                    $image = "<img src='/images/user.png' title='Проверен'>";
                    /*$checked = !is_null($person->uniqueid->value);
                    if($checked)
                    {
                        $image = "<img src='/images/user.png' title='Проверен'>";
                    }
                    else
                    {   
                        $image = "<img src='/images/user_off.png' title='Не проверен'>";
                    }*/
                    $oms .= '&nbsp;';
                    $tbl->newcol($image, true, true, null, null, "16px", "middle");
                        $fiorec = sprintf('<a onclick="return showCard(\'%s\');" href="/getcard.php?id=%s">%s</a>', $card_id, $card_id, $fio);
                    $tbl->newcol($fiorec, true, false, null, null, null, "middle");
                    $tbl->newcol($birthday, true, false, null, null, null, "middle");
                    //$tbl->newcol($oms, true, false, null, null, null, "middle");
                        /*$rec = "<a href='/remoterecord/lpulist.php?person=".$card_id."'>Записать</a>";
                    $tbl->newcol($rec, true, true, null, null, null, "middle");*/
                        $delete = "<a onclick='return confirm(\"Удалить карточку из списка?\");'
                        href='".$mikron->Tools->MakePath('?application=webdoctor_kartoteka&method=deletecardfile&id='.$card_id.'&return='.$_SERVER['REQUEST_URI'])."'>Удалить</a>";
                    $tbl->newcol($delete, true, true, null, null, null, "middle");
            }
            $tbl->end();
            if(count($cardfiles) == 0)
            {
                ?>В Вашей картотеке нет ни одной карточки.
                <br />Вы можете добавить карточку нажав на соответствующую кнопку.<?php
            }
            ?></div>
            <div class="card" id="cardinfo"
                style="display: none; position: absolute; left: 150px; top: 325px;
                background-color: #ffe; border: 4px solid #80c040; padding: 1em; ">
                Получение данных...
            </div>
            <?php
        }

        function showaddform($popup = false)
        {
            global $mikron;
            ?>
            <div id="addpeoplediv" class="addpeoplediv">
                <div class="success">Карточка успешно добавлена.</div>
                {{userform
                    entityname="T_PERSON"
                    id=""
                    class="submit"
                    htmlform='<table id="%mikron_editor_table_id%" style="%mikron_editor_table_style%" border="0" cellspacing="%mikron_editor_table_cellspacing%" cellpadding="%mikron_editor_table_cellpadding%">
<tr><td colspan="2"><h1>%mikron_editor_form_caption%</h1></td>
</tr><tr><td colspan="2">%remotelpu%</td></tr>
<tr><td>%lastname%</td><td>%birthday%</td></tr>
<tr><td>%firstname%</td><td>%omsnumber%</td></tr>
<tr><td>%fathername%</td><td>%patient_identifier_code%</td></tr>
<tr><td colspan="2">%mikron_editor_form_submit_button%</td></tr>
</table>'
                    formid="addpeopleform"
                    onsubmit = "submitAjax(this)"
                    caption="Добавление карточки в картотеку"
                    captcha=0
                    returnpage="<?php echo $mikron->Tools->MakePath('?addperson=%ID%'); ?>"
                    processor="<?php echo $_SERVER['REQUEST_URI']; ?>"}}
                <?php if($popup) { ?>
                <button id="exclosebutton" onclick="CloseAddPeopleForm();">Закрыть</button>
                <?php } ?>
                <script type="text/javascript">
                    // Инициализация контрола «Календарь»
                    $(function() {
                        $.datepicker.setDefaults($.extend({showMonthAfterYear: false}, $.datepicker.regional['ru']));
                        $("#birthday").datepicker({
                         onClose: function(dateText, inst) {$("#birthday").focus();},
                        _showButtonPanel: true,
                        changeMonth: true,                           
                        changeYear: true,
                        altField: '#datepicker',
                        altFormat: 'd MM, yy',
                        yearRange: "1920:"+(new Date()).getYear(),
                        buttonImage: '/images/calendar.gif',
                        buttonText: 'Выбрать дату рождения',
                        buttonImageOnly: true,
                        showOn: "button"
                        });
                    });

                    // Функция выполняется после полной загрузки страницы
                    $(document).ready(function()
                    {
                        /**
                        * Регистрируем горячие клавишу.
                        * При нажатиина [ESC] закроются все открытые окна
                        */
                        $(document).bind('keydown', 'esc', function()
                        {
                            //CloseAddPeopleForm();
                            //$('div#cardinfo').fadeOut();
                        });
                    });

                    function submitAjax(form)
                    {
                        $(':input[type=submit]',form).attr('disabled','disabled');
                        $(':input[type=submit]','form.submit').attr('value','Подождите, идет проверка...');
                        $('#exclosebutton').attr('disabled','disabled');
                        $('div.success').fadeOut();
                        // готовим объект
                        var options = {
                            url: '<?php global $mikron; echo $mikron->Tools->MakePath('?ajax=addperson&save=save'); ?>',
                            type:'post',
                            // resetForm: true,
                            clearForm: true,
                            // timeout: 3000,
                            beforeSubmit: showRequest,
                            error: function()
                            {
                            },
                            complete: function(data, status)
                            {
                                if(status == 'error')
                                {
                                    $('div.success').css({ "background-color":"#ffb493", "border":"1px solid #c38526"});
                                    $('div.success').html(data.responseText);
                                }
                                else
                                {
                                    $('div.addpeoplediv').hide();
                                    $('div.success').hide();
                                    $('form.submit').hide();
                                    $('div.success').css({ "background-color":"d4fd96", "border":"1px solid #85c326"});
                                    document.location.href = "<?php echo $_SERVER['REQUEST_URI']; ?>";
                                }
                                $(':input[type=submit]','form.submit').attr('disabled','');
                                $(':input[type=submit]','form.submit').attr('value','Добавить');
                                $('#exclosebutton').attr('disabled','');
                                $('div.success').fadeIn();
                            }
                        };
                        // передаем опции в  ajaxSubmit
                        $("form.submit").ajaxSubmit(options);
                        return false;
                    }

                    /**
                    * Функция показа данных карточки
                    */
                    function showCard(id)
                    {
                        $.get('/?application=webdoctor_kartoteka&method=getcard&id='+id, {'module':'webdoctor_kartoteka','action':'getcard','ajax':true,'id':id}, function(responseData)
                        {
                            $('div#cardinfo').html(responseData);
                            $('div#cardinfo').fadeIn();
                            //code here will be called when the ajaxcall has completed
                        })
                        return false;
                    }

                    /**
                    * Вывод формы добавления карточки
                    */
                    function ShowAddPeopleForm()
                    {
                        var form = document.getElementById('addpeoplediv');
                        $(':input', form).attr('disabled', '');
                        $('div.addpeoplediv').fadeIn();
                    }

                    // закрытие формы добавления карточки
                    function CloseAddPeopleForm()
                    {
                        var form = document.getElementById('addpeoplediv');
                        $('div.success').fadeOut();
                        $('div.addpeoplediv').fadeOut(); //.removeShadow();
                    }

                    function showRequest(formData, jqForm, options)
                    {
                        /*
                        for (var i=0; i < formData.length; i++)
                        { 
                            if(formData[i].name == 'userform[birthday]')
                            {
                                if(formData[i].value)
                                {
                                }
                            }
                        }*/
                        // var usernameValue = $('input[@name=userform[birthday]]').fieldValue(); 
                        //var form = formData[0]; 
                        //alert(form[0]);
                        /* var queryString = $.param(formData);
                        alert(queryString); */
                        return true;
                    }
                </script>
            </div>
            <?php
            if(!$popup)
            {
                $frm = new html_form('cancelform', 'get', '/');
                $frm->addSubmit("cancelsubmitbutton", 'Отмена');
                $frm->end();
            }
        }
    }
?>